package com.bonshotels.DomainLayer.DomainModel;

import java.io.Serializable;

/**
 * Classe SenseDescompte.
 * 
 * Aquesta classe implementa una de les estrategies per a calcular el preu dun tipus
 * dhabitacio. Concretament es el cas en que no saplica cap descompte i per tant el
 * preu final es el mateix preu del tipus dhabitacio. Es public ja que el paquet de 
 * capa de dades ha de poder veure aquesta classe (que esta en un paquet diferent, 
 * Domain Model) per a poder fer el mapeig correctament.
 * Com que utilitzem el framework de persistencia
 * Hibernate i aquest utilitza reflexio per fer la seva feina les nostres classes han d'acomplir una
 * serie de propietats perque la reflexio del Hibernate pugui fer completament la seva feina, les
 * classes han de ser publiques, han de tenir un constructor public buit (si no en tenen un d'explicit
 * el per defecte ja ho es), han d'implementar Serializable, i han de tenir substituits (override) els
 * metodes equals() i hashCode() perque identifiquin les classes a partir de la seva clau natural.
 * Com que DescompteVarible s'identifica pel descompteVariable l'hem fet servir a l'hora
 * d'implementar equals(), hashCode().
 * A diferencia del disseny de la entrega 3 la interficie IEstrategiaClaculPreu i les seves
 * realitzacions han passat a utilitzar una estrategia de mappeig del tipus Class Table Inheritance
 * utilitzant una taula per guardar tots els id de les realitzacions de IEstrategiaCalculPreu.
 * Els metodes getId i setId apareixen d'implementar els metodes creats a la interficie
 * IEstrategiaCalculPreu perque el Hibernate pugui assignar claus que no es solapin a totes
 * les instancies de classes que l'implementen.
 * @author Jordi Sabater
 */
public class SenseDescompte implements IEstrategiaCalculPreu, Serializable {
	
	/** La constant serialVersionUID. */
	private static final long serialVersionUID = 6678817239130159215L;
	
	/** L' id. */
	private long id;

	/**
	 * Calcula el preu dun tipus dhabitacio en el qual no saplica cap descompte.
	 *
	 * @param preu El preu base al qual se li aplica una estrategia per a calcular
	 * el preu final.
	 * @return El mateix preu que es passa com a parametre ja que estem implementant
	 * lestrategia en la que no saplica cap descompte en el preu.
	 */
	public float calcularPreu(float preu) {
		return preu;
	}

	/* (non-Javadoc)
	 * @see com.bonshotels.DomainLayer.DomainModel.IEstrategiaCalculPreu#getId()
	 */
	@Override
	public long getId() {
		return id;
	}

	/* (non-Javadoc)
	 * @see com.bonshotels.DomainLayer.DomainModel.IEstrategiaCalculPreu#setId(long)
	 */
	@Override
	public void setId(long id) {
		this.id = id;		
	}

	/**
	 * Getter de serialversionuid.
	 *
	 * @return El serialversionuid
	 */
	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + (int) (id ^ (id >>> 32));
		return result;
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		SenseDescompte other = (SenseDescompte) obj;
		if (id != other.id)
			return false;
		return true;
	}
	
}
